package com.atguigu.test.dacahngmainshitidierji;

/**
 * 2 * @Author: madonghui
 * 3 * @Date: 2020/11/6 12:16
 * 4
 */
public class VolatileTestAtomic {
    //volatile保证可见性不保证原子性，不保证原子性的验证
    /*原子性是什么意思？
    * 不可分割，完整性，也就是某个线程正在做具体的业务智能关键不可以被加塞或者被分割，需要体现完整性
    * 要么同时成功要么同时失败*/
    public static void main(String[] args) {
        /**
         * 平常让线程等待的方式：1.不知道程序执行完的具体时间常常是估出来的时间
         *                    2.知道一个java程序后台有几个线程个数
         * java程序中默认有两个线程主线程和gc线程
         */

        Shuzi shuzi = new Shuzi();

        for (int i = 1; i <= 20; i++) {
            new Thread(()->{
                for (int j = 1; j <= 1000; j++) {
                    shuzi.addPlusPlus();
                }
            },String.valueOf(i)).start();
        }


        //线程让步这种方式能够高效的执行程序，不用再人为的去控制了
        while (Thread.activeCount() > 2){
            //让出执行权让别的线程去执行
            Thread.yield();
        }
        int num = shuzi.num;
        System.out.println("num = " + num);
    }
    static String nuu;
}
